<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of DistribuicaoController
 *
 * @author felipe
 */
class DistribuicaoController extends Zend_Controller_Action {
    
    public function init(){
            parent::init();
            $this->view->tituloPagina = "Controle de Distribuição";
        }
    
    public function indexAction(){
        $form = new App_Form_Pesquisa();
        $form->montaTipoBusca(array('co_distribuicao'=>'Cód. Distribuicao'
                                   ,'co_unidade'=>'Cód. Unidade'
                                   ,'no_unidade'=>'Unidade'));
        $form->setPeriodo();
        $form->setAction('javascript:;');
        $form->show();
        $this->view->form = $form;
    }
    
    public function listarAction(){
        $this->_helper->layout->disableLayout();			
        try {
            if ($this->getRequest()->isPost()) {				  
                $arrParam = array($this->_getParam('tipo_busca') => $this->_getParam('palavra_chave'));
                if($this->_getParam('dt_inicio')!=''){
                    $arrParam['dt_inicio'] = Voitech_Util::converteDataBanco($this->_getParam('dt_inicio'));
                }
                if($this->_getParam('dt_final')!=''){
                    $arrParam['dt_final'] = Voitech_Util::converteDataBanco($this->_getParam('dt_final'));
                }
                $obRepository = new App_Model_DistribuicaoRepository();                            
                $paginator = new Voitech_Paginator($obRepository->listarTodos($arrParam),$this->_getParam( 'list' ),$this->_getParam('page'));		       					    	
                $this->view->paginator	= $paginator->paginar(10);
                $this->view->div_id 	= 'div_listar_distribuicao';
                $this->view->dataType 	= "post";
                $this->view->frmName	= "frmPesquisar";       
            }			
        }catch (Voitech_ExceptionValidate $e) {
                //echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'favor preencher dados obrigatórios'));
        }catch (Voitech_Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
        }catch (Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
        }			
    }
    
    public function cadastroAction() {
        $this->_helper->layout->disableLayout();
        $obUnidadeRepository = new App_Model_UnidadeRepository();
        $arObUnidade = $obUnidadeRepository->listarTodos(array('st_ativo'=>'S'));
        $obProdutoRepository = new App_Model_ProdutoRepository();
        $arProduto = $obProdutoRepository->listarTodos(array('nu_total_produto'=>1  ,'st_ativo'=>'S'));
        $obTipoProdutoRepository = new App_Model_TipoProdutoRepository();
        $arTipoProduto = $obTipoProdutoRepository->listarTodos(array('st_ativo'=>'S'));
        $this->view->arUnidade = Voitech_Util::converteModeloArrayCombo($arObUnidade, 'coUnidade', "noUnidade",1);
        $this->view->arProduto = Voitech_Util::converteModeloArrayCombo($arProduto, 'coProduto', "noProduto",1);
        //$this->view->arTipoProduto = Voitech_Util::converteModeloArrayCombo($arTipoProduto, 'coTipoProduto', "noTipoProduto",1);
    }
    
    public function salvarAction(){
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        try{
            App_Model_Db_Distribuicao::build()->getAdapter()->beginTransaction();
            $obDistribuicao = new App_Model_Distribuicao();

            if($this->_getParam('item_distribuicao')==''){
                throw new Voitech_Exception('Favor enviar pelo menos um item de Distribuicao');
            }

            foreach($this->_getParam('item_distribuicao') as $item) {
                $obProduto = new App_Model_Produto();
                $obProduto->setCoProduto($item['produto']);
                $obProduto->setNuTotalProduto( (($item['atendido'])*(-1))  );

                $obItemDistribuicao = new App_Model_ItemDistribuicao();
                $obItemDistribuicao->setObProduto($obProduto);
                $obItemDistribuicao->setNuQuantidadeSolicitada($item['solicitado']);
                $obItemDistribuicao->setNuQuantidadeAtendida($item['atendido']);
                $obDistribuicao->adicionarItemDistribuicao($obItemDistribuicao);
                
                $obProdutoRepository = new App_Model_ProdutoRepository();
                $obProdutoRepository->atualizarEstoque($obProduto);                
                
            }

            $obUnidade = new App_Model_Unidade();
            $obUnidade->setCoUnidade($this->_getParam('co_unidade'));
            
            $obDistribuicao->fecharDistribuicao($obUnidade, new App_Model_Usuario($this->view->user->getCoPessoa()));
            $obDistribuicaoMapper = new App_Model_DistribuicaoMapper($obDistribuicao);
            $obDistribuicaoMapper->cadastrar();
            
//            $obArmazenamento = new App_Model_Armazenagem();
//            $obArmazenamento->setObDistribuicao($obDistribuicaoMapper->getObModel());
//            $obArmazenamentoMapper = new App_Model_ArmazenagemMapper($obArmazenamento);
//            $obArmazenamentoMapper->alterar();
            App_Model_Db_Distribuicao::build()->getAdapter()->commit();
            echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Operação realizada com sucesso!','id'=>$obDistribuicaoMapper->getObModel()->getCoDistribuicao()));
        }catch(Voitech_Exception $e){
            App_Model_Db_Distribuicao::build()->getAdapter()->rollback();
            echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
        }catch(Exception $e){
            App_Model_Db_Distribuicao::build()->getAdapter()->rollback();
            Voitech_Log::gerarLog($e->getMessage());
            echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>'Ops, ocorreu um erro no sistema'));
        }
    }
    
    public function visualizarAction(){
        $this->_helper->layout->setLayout('clear');
        $obDistribuicao = new App_Model_Distribuicao();
        $obDistribuicao->setCoDistribuicao($this->_getParam('id'));
        $obDistribuicaoMapper = new App_Model_DistribuicaoMapper($obDistribuicao);
        $obDistribuicaoMapper->buscarPorId();
        $this->view->obDistribuicao = $obDistribuicaoMapper->getObModel();
    }
    
    public function termoAction(){
        $this->_helper->layout->setLayout('clear');
        $obDistribuicao = new App_Model_Distribuicao();
        $obDistribuicao->setCoDistribuicao($this->_getParam('id'));
        $obDistribuicaoMapper = new App_Model_DistribuicaoMapper($obDistribuicao);
        $obDistribuicaoMapper->buscarPorId();
        $this->view->tituloPagina = '';
        $this->view->obDistribuicao = $obDistribuicaoMapper->getObModel();
    }    
    
}
